/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unisinos.tga;

/**
 *
 * @author Douglas
 */
public class IsometricView extends TileMapView {

    public int coluna;
    public int linha;

    public IsometricView(int largura, int altura) {
        super(largura, altura);
    }

    public void tileWalking(int orientation) {

        switch (orientation) {
            case NORTE:
                linha--;
                coluna++;
                break;
            case SUL:
                linha++;
                coluna--;
                break;
            case OESTE:
                linha--;
                coluna--;
                break;
            case LESTE:
                linha++;
                coluna++;
                break;
            case NORDESTE:
                coluna++;
                break;
            case NOROESTE:
                linha--;
                break;
            case SUDESTE:
                linha++;
                break;
            case SUDOESTE:
                coluna--;
        }
        // Verifica se clicou em algum dos tiles
        if (linha < 0 || coluna < 0 || linha > super.altura || coluna > super.largura) {
            linha = coluna = -1;
            return;
        }
        calcTilePosition(linha, coluna);

    }

    /**
     * Calcula qual tile foi clicado pelo mouse.
     * @param x
     * @param y 
     */
    public void mouseMap(int x, int y) {

        coluna = ((x / 32) + (y / 16)) / 2;
        linha = (x - (coluna * 32)) / (32);

        if (coluna > super.largura) {
            coluna = super.largura;
        }
        if (linha > super.altura) {
            linha = super.altura;
        }
        // Ajuste fino
        if (coluna == super.largura) {
            coluna--;
        }
        if (linha == super.altura) {
            linha--;
        }
        calcTilePosition(linha, coluna);

        // Verifica se clicou em algum dos tiles
        if (linha < 0 || coluna < 0 || linha > super.altura || coluna > super.largura) {
            linha = coluna = -1;
            return;
        }

        if (y < this.y && x < this.x + 32) {
            tileWalking(this.SUDOESTE);
        }
        if (y < this.y && x > this.x + 32 && x < this.x + 64) {
            tileWalking(this.SUDESTE);

        }

    }

    /**
     * Define a posição do tile específico da posição no eixo xy.
     * @param linha
     * @param coluna 
     */
    public void calcTilePosition(int linha, int coluna) {

        x = (coluna * 32) + (linha * 32);
        y = (coluna * 16) - (linha * 16);
    }
}
